// 给出一个 32 位的有符号整数，你需要将这个整数中每位上的数字进行反转。

// 示例 1:

// 输入: 123
// 输出: 321
//  示例 2:

// 输入: -123
// 输出: -321
// 示例 3:

// 输入: 120
// 输出: 21
// 注意:

// 假设我们的环境只能存储得下 32 位的有符号整数，则其数值范围为 [−231,  231 − 1]。请根据这个假设，如果反转后整数溢出那么就返回 0。

#include <algorithm>
#include <climits>

using namespace std;

class Solution1 {
public:
    int reverse(int x) {
        int res{0};
        while (x != 0) {
            if (abs(res) > INT_MAX / 10) return 0; // INT_MAX = 2147483648
            res = res * 10 + x % 10;
            x /= 10;
        }
        return res;
    }
};

class Solution {
public:
    int reverse(int x) {
        double res = x % 10;
        while ((x /= 10) != 0)
            res = res * 10 + x % 10;
        if (res >= 2147483648 || -res >= 2147483648)
            res = 0;
        return static_cast<int>(res);
    }
};

class Solution {
public:
    int reverse(int x) {
        long res{0};
        while (x) {
            res = res * 10 + x % 10;
            if (res < INT_MIN || res > INT_MAX) {
                return 0;
            }
            x /= 10;
        }
        return res;
    }
};
